package com.struts.converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.conversion.TypeConversionException;
import com.struts.pojo.Rectangle;

/**
 * 自定义类型转换器
 * @author LC
 *
 */
public class RectangleConverter extends StrutsTypeConverter{
	
	/**
	 * 实现字符串向自定义对象的转换：长方形向字符串转换
	 * 		context：转换上下文，可以在里面引用各种对象，比如：可以通过context.get(ValueStack.VALUE_STACK)来引用值栈。
	 * 		values：用户输入的字符串
	 * 		toClass：将要被转换成的对象类型。
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		//用户输入，例如16:9
		String userInput = values[0] ;
		String[] arr = userInput.split(":") ;
		//在进行类型转换之前，对用户输入的数据的格式进行检查
		if(arr.length != 2) {
			throw new TypeConversionException("请输入正确的格式，如weight:height") ;
		}
		try {
			Rectangle rectangle = new Rectangle() ;
			int width = Integer.parseInt(arr[0]) ;
			int height = Integer.parseInt(arr[1]) ;
			rectangle.setWidth(width) ;
			rectangle.setHeight(height) ;
			return rectangle ;
		} catch (RuntimeException e) {
			throw new TypeConversionException("请输入正确的格式，如weight:height") ;
		}
	}

	/**
	 * 实现自定义对象向字符串的转换
	 * 		context：同上
	 * 		o：需要被转换的对象
	 */
	@Override
	public String convertToString(Map context, Object o) {
		Rectangle rectangle = (Rectangle) o ;
		return "长方形：宽"+rectangle.getWidth()+",高"+rectangle.getHeight(); 
	}

}
